(教材)08【 Python:変数・型・型変換】
まずは,基礎の基礎として,変数,代入,型について学ぶ.
※注意※
記事の中でファィルを作成する場合,Unixエディタを使って実際に作成し,実行しなさい.(特に後半)
ファイル名は記事の通りで構わない.
実行コマンドは"python3"なので注意
"python"だと別バージョンが起動するか,コマンドないと言われる
例:プログラムがsample1-1.pyならば,以下のようにする.
$ python3 sample1-1.py▼
代入演算子 "=" (イコール1個) は,比較演算子の"==" (イコール2個) と 混同しやすいので注意!
[1]変数と代入
プログラムの中で処理する数値や文字を入れる「容れ物」が変数である.そして,その容れ物に値を放り込むのが代入である.
下の記事のを読み,実際にサンプルを入力して確認しなさい.
[2]型 (データ型)
Pythonは動的型付け言語なので,データ型をあまり気にしなくてもいい.が,忘れてもいけないという,ちょっと微妙な設計になっている.
★Pythonのデータ型には数値型,文字列型のほかにも bool型,range型,None型,リスト( list ),タプル( tuple ),辞書( dict ),集合( set ) などがある.
下の記事中「3.1.Pythonを電卓として使う」の「3.1.1数」「3.1.2文字列型」を読み,サンプル通りに入力して確認しなさい.
※参考※データの型付けは言語によって異なる.メジャーな言語では,
JavaやC言語は静的型付け
Ruby, Perl, Javascript, PHPは動的型付け
[3]型変換
Pythonでは通常は型を気にしなくてもいいが,時には型変換が必要な場合がある.たとえば以下の場合.
文字列の中に数字を連結する
input()関数を使って取得した文字列を数値として演算する
それぞれ説明しよう.
(1) 文字列の中に数字を連結する:
上の記事の中頃,「数値と文字列の連結・結合: +演算子, +=演算子, str(), format()」を読み,入力例を実際にやって確認しなさい.
※対話モードでよい
(2) input()で得た文字を数値にする:
上の記事を読み,サンプルを実際に入力して確認しなさい.
※ただしこの記事では引数として与えられた文字列が表示されていない(表示が間違っている).その点注意して訂正しながら実行すること.
(3) input()に"eval()関数"を使う:
number=eval(input("回数?:"))
この "eval" 関数が結構重要.入力した数値の型を自動判別して変換してくれる.
以下,対話モードで解説する.
code:対話モードでinputとevalの練習
>> a=input("In: ")▼ #◀◀ evalなしでinput() In: 16▼ ◀◀ 16と半角数字を入れてEnter
>> type(a)▼ #◀◀ type()関数で変数の型名を調べると…… <class 'str'> #◀◀ strつまり文字列型になってる.だから…… >> print(a+8)▼ # ◀◀ a+8を計算してみると……
Traceback (most recent call last): #◀◀ 見事にエラー! File "", line 1, in
TypeError: can only concatenate str (not "int") to str
>> b=eval(input("In: "))▼ #◀◀ evalを使ってみる >> type(b)▼ #◀◀ bの型名を調べると…… <class 'int'> #◀◀ 整数型と判定! >> b=eval(input("In: "))▼ #◀◀ もう一度入力 In: 3.141592 #◀◀ 小数を入力したらどうなる? >> type(b)
<class 'float'> #◀◀ float型と判定!かしこい! >>
つまりeval()は,input()が文字型として受け取ったものを適切な数字型に変換するのだ.
★型変換まとめ(1): 型変換関数: int() → 整数に.float() → 浮動小数点に.str() → 文字列に
★型変換まとめ(2): input() の返り値は文字列型 → 数値演算するなら int() / float() / eval()を使う
※当たり前だが,文字列として利用するなら input() に eval() を使う必要はない
【豆知識】Pythonではinput()で得られた値が数値か文字列化を判別する処理が,意外と手間だ.
それは,int()やstr()を実行した際に,異なる文字種だとその瞬間エラーが吐き出されるからだ.
※上で紹介したeval()が自動判別するから便利だと書いたが,対象はあくまでも数値.strタイプの文字が入力されたらエラーになる
手っ取り早い解決策としてはどちらか一方を「例外」とする 'try ~ except'文を使うのがよいだろう.
code:try~exceptの例
try:
x = int(input("半角数字をどうぞ: "))
print(x , "だね.")
except ValueError: # 半角数字以外のときのエラーを捉えて例外処理
print("半角数字じゃないよ")
以上.
2023/10/31